package com.server.service.impl;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;

import com.server.service.IUserAssignmentService;

/**
 * 评估、审核人员分配
 * @author ServerZhang
 * @date 2016年8月1日
 */
@Service("UserAssignmentService")
public class UserAssignmentService implements IUserAssignmentService {
	
	/*
	 * 评估专家
	 */
	private List<String> estimateUser = new ArrayList<String>();//SYS_ESTIMATE
	/*
	 * 审核人员
	 */
	private List<String> checkUser = new ArrayList<String>();//SYS_CHECK
	
	@Autowired
	private JdbcTemplate jdbcTemplate;
	
	 /**
	 * 获取评估人员
	 * @return
	 * @author ServerZhang
	 * @date 2016年9月5日
	 */
	@Override
	public List<Map<String, Object>> getEstimateUser() {
		//return estimateUser;
		String sql = "select * from education.V_adminUser_role where ident = 'SYS_ESTIMATE'";
		return jdbcTemplate.queryForList(sql);
	}
	public void setEstimateUser(List<String> estimateUser) {
		this.estimateUser = estimateUser;
	}
	public void addEstimateUser(String user) {
		this.checkUser.remove(user);
		this.estimateUser.add(user);
	}
	public void deleteEstimateUser(String user) {
		this.estimateUser.remove(user);
	}

	 /**
	 * 获取审核人员
	 * @return
	 * @author ServerZhang
	 * @date 2016年9月5日
	 */
	@Override
	public List<Map<String, Object>> getCheckUser() {
		//return checkUser;
		String sql = "select * from education.V_adminUser_role where ident = 'SYS_CHECK'";
		return jdbcTemplate.queryForList(sql);
	}
	public void setCheckUser(List<String> checkUser) {
		this.checkUser = checkUser;
	}
	public void addCheckUser(String user) {
		this.estimateUser.remove(user);
		this.checkUser.add(user);
	}
	public void deleteCheckUser(String user) {
		this.checkUser.remove(user);
	}
	
	 /**
	 * 评估、审核人员初始化到内存中
	 * @author ServerZhang
	 * @date 2016年8月1日
	 */
	@Override
	public void loadUser(){
		String sql = "select * from education.V_adminUser_role where ident in('SYS_ESTIMATE','SYS_CHECK')";
		List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
		List<String> estimateUser = new ArrayList<String>();//SYS_ESTIMATE
		List<String> checkUser = new ArrayList<String>();//SYS_CHECK
		Iterator<Map<String, Object>> iterator = list.iterator();
		while(iterator.hasNext()){
			Map<String, Object> next = iterator.next();
			Object identObj = next.get("ident");
			if (identObj == null) {
				continue;
			}
			if ("SYS_ESTIMATE".equals(identObj.toString())) {
				estimateUser.add(next.get("nickname").toString());
			}else if ("SYS_CHECK".equals(identObj.toString())){
				checkUser.add(next.get("nickname").toString());
			}
		}
		this.estimateUser = estimateUser;
		this.checkUser = checkUser;
	}

	/**
	 * 指定评估专家
	 * @param relaId 关联Id
	 * @param type 评估的类型 1表示课程，2表示试卷，3表示案例，4表示调研问卷，5表示涉外国别，6表示涉外人员机构，7涉外应急处理，8涉外相关专题，9咨询问题
	 * @param num 指定的专家人数 ,暂时没用
	 * @return
	 * @author ServerZhang
	 * @date 2016年8月1日
	 */
	@Override
	public Boolean estimateAssi(Integer relaId,Integer type,Integer num){
		/*int userCount = this.estimateUser.size();
		int index = userCount*(int)(Math.random() * 1000)/1000;
		String evaluator = estimateUser.get(index);*/
		String sql = "insert into education.evalue (relaId,type) values(%s,%s)";
		int update = jdbcTemplate.update(String.format(sql,relaId,type));
		return update > 0;
	}
	/**
	 * 指定审核人员
	 * @param relaId 关联Id
	 * @param type 评估的类型 1表示课程，2表示试卷，3表示案例，4表示调研问卷，5表示涉外国别，6表示涉外人员机构，7涉外应急处理，8涉外相关专题，9咨询问题
	 * @param num 指定的专家人数 ,暂时没用
	 * @return
	 * @author ServerZhang
	 * @date 2016年8月1日
	 */
	@Override
	public Boolean checkAssi(Integer relaId,Integer type,Integer num){
		/*int userCount = this.checkUser.size();
		int index = userCount*(int)(Math.random() * 1000)/1000;
		String auditor = checkUser.get(index);*/
		String sql = "insert into education.audit (relaId,type) values(%s,%s)";
		int update = jdbcTemplate.update(String.format(sql,relaId,type));
		return update > 0;
	}
}
